package lv.clientedisqueria.controller.principal;

import java.awt.event.ActionEvent;
import java.util.Observable;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JOptionPane;

import lv.clientedisqueria.view.Mensajeria;

/**
 * Este es el controller principal que maneja los eventos principales 
 */
public class PrincipalController extends Observable {

	public static final String TEMA = "ABM Tema";
	public static final String DISCO = "ABM Disco";
	public static final String SALIR = "Salir";
	public static final String ADMIN_USUARIO = "Admin Usuario";
	public static final String INGENIERO = "ABM Ingenieros";
	public static final String MUSICO = "ABM Musicos";
	public static final String INSTRUMENTO = "Instrumento";
	public static final String ESTILO = "Estilo";
	public static final String TIPOSOPORTE = "Tipo Soporte";
	public static final String GRUPO = "Grupo";


	/**
	 * notifica los cambios a la vista
	 */
	public void notificar(String mensaje){
		setChanged();
		notifyObservers(mensaje);
	}

	/**
	 * Accion de administrar discos
	 * @return
	 */
	@SuppressWarnings("serial")
	public AbstractAction getDiscoAction() {
		AbstractAction abstractAction = new AbstractAction(DISCO) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(DISCO);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}

	/**
	 * Accion de administrar temas
	 * @return
	 */
	@SuppressWarnings("serial")
	public AbstractAction getTemaAction() {
		AbstractAction abstractAction = new AbstractAction(TEMA) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(TEMA);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}

	/**
	 * Accion de salir de la aplicacion
	 * @return
	 */
	@SuppressWarnings("serial")
	public AbstractAction getSalirAction() {
		AbstractAction abstractAction = new AbstractAction(SALIR) {
			@Override
			public void actionPerformed(ActionEvent e) {
				if (Mensajeria.mensajePregunta1(e.getSource(), "Salir", "¿Desea salir de la aplicación?")
						== JOptionPane.YES_OPTION){
					System.exit(0);
				}
			}
		};
		return abstractAction;
	}

	/**
	 * Accion de administracion de usuario
	 * @return
	 */
	@SuppressWarnings("serial")
	public AbstractAction getAdminUsuarioAction() {
		AbstractAction abstractAction = new AbstractAction(ADMIN_USUARIO) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(ADMIN_USUARIO);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}
	
	/**
	 * Accion de abm ingenieros
	 * @return
	 */
	@SuppressWarnings("serial")
	public AbstractAction getIngenierosAction() {
		AbstractAction abstractAction = new AbstractAction(INGENIERO) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(INGENIERO);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}

	@SuppressWarnings("serial")
	public Action getMusicoAction() {
		AbstractAction abstractAction = new AbstractAction(MUSICO) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(MUSICO);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}
	/**
	 * Accion de instrumento
	 * @return
	 */
	@SuppressWarnings("serial")
	public AbstractAction getInstrumentoAction() {
		AbstractAction abstractAction = new AbstractAction(INSTRUMENTO) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(INSTRUMENTO);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}
	
	
	/**
	 * Accion de estilo
	 * @return
	 */
	@SuppressWarnings("serial")
	public AbstractAction getEstiloAction() {
		AbstractAction abstractAction = new AbstractAction(ESTILO) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(ESTILO);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}
	
	/**
	 * Accion de tipo de soporte
	 * @return
	 */
	@SuppressWarnings("serial")
	public AbstractAction getTipoSoporteAction() {
		AbstractAction abstractAction = new AbstractAction(TIPOSOPORTE) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(TIPOSOPORTE);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}

	@SuppressWarnings("serial")
	public Action getGruposAction() {
		AbstractAction abstractAction = new AbstractAction(GRUPO) {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificar(GRUPO);
			}
		};
//		abstractAction.setEnabled(RolUsuario.getInstance().enabledAction());
		return abstractAction;
	}
}
